'''
Created on 18/09/2013

@author: Gonzalo
'''

class PearsonTuckey(object):
    '''
    Esta clase implementa los metodos media y varianza para la distribucion
    de Pearson y Tuckey, con el mapeo de opt, pes y mediana visto en clase y
    la simplificacion al tomar los percentiles como porcentajes
    '''


    def __init__(self):
        pass
    
    def media(self, valor_pes, valor_opt=None, mediana=None):
        '''
        Devuelve la media. Tomamos el valor_pes segun el cono de Boehm 
        como el 100% de la distribucion y los percentiles los calculamos
        como porcentajes. De esta forma, segun la distribucion el valor optimista 
        es el percentil 5%, la mediana el 50% y el pesimista el 95%. 
        '''
        valor_opt = valor_pes*0.05
        mediana = valor_pes*0.5
        valor_pes = valor_pes*0.95
        return (0.185*valor_opt + 0.63*mediana + 0.185*valor_pes)
    
    def varianza(self, valor_pes, valor_opt=None, mediana=None):
        '''
        Devuelve la varianza. Tomamos el valor_pes segun el cono de Boehm 
        como el 100% de la distribucion y los percentiles los calculamos
        como porcentajes. De esta forma, segun la distribucion el valor optimista 
        es el percentil 5% y el pesimista el 95%. 
        '''
        valor_opt = valor_pes*0.05
        valor_pes = valor_pes*0.95
        return ((valor_pes-valor_opt)**2)/(3.25**2)